MVVM প্যাটার্নে ViewModel হল একটি গুরুত্বপূর্ণ উপাদান যা View এবং Model এর মধ্যে ব্রিজ হিসেবে কাজ করে। এটি Model থেকে ডেটা গ্রহণ করে এবং তা View-এ উপস্থাপনযোগ্যভাবে রূপান্তর করে। ViewModel এ কোনো UI উপাদান বা নির্দিষ্ট স্ক্রীন বা পৃষ্ঠার সাথে সম্পর্কিত কোনও কোড থাকে না, তবে এটি View এর মধ্যে প্রদর্শিত ডেটা এবং লজিক পরিচালনা করে।
নিচে ViewModel তৈরি এবং কনফিগারেশন সম্পর্কে বিস্তারিত ব্যাখ্যা করা হয়েছে।
ViewModel তৈরি করার সময় লক্ষ্য রাখা উচিত যে এটি View এবং Model এর মধ্যে ডেটা ট্রান্সফার এবং লজিক ব্যবস্থাপনা করবে। ViewModel সাধারণত Model এর ডেটাকে গ্রহণ করে এবং তা View এর জন্য প্রপার ফরম্যাটে রূপান্তর করে।
ডেটা প্রপার্টি তৈরি:
public class ProductViewModel : INotifyPropertyChanged
{
private string _name;
private decimal _price;
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
}
public decimal Price
{
get { return _price; }
set
{
if (_price != value)
{
_price = value;
OnPropertyChanged(nameof(Price));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
ডেটা প্রসেসিং ও লজিক:
public class ProductViewModel : INotifyPropertyChanged
{
private Product _product;
public ProductViewModel(Product product)
{
_product = product;
UpdateProductDetails();
}
public void UpdateProductDetails()
{
Name = _product.Name;
Price = _product.Price;
}
// Other properties and methods
}
ViewModel কনফিগারেশনের মাধ্যমে View এর সাথে ডেটা বাইন্ডিং এবং ইউজার ইন্টারঅ্যাকশন পরিচালনা করা হয়। এটি ViewModel কে View এর UI উপাদানগুলির সাথে যুক্ত করে এবং অ্যাপ্লিকেশনের বিজনেস লজিকের কার্যকারিতা বজায় রাখে।
ডেটা বাইন্ডিং কনফিগারেশন:
<TextBox Text="{Binding Name}" />
<TextBlock Text="{Binding Price}" />
Command Binding:
public ICommand UpdatePriceCommand { get; }
public ProductViewModel()
{
UpdatePriceCommand = new RelayCommand(UpdatePrice);
}
private void UpdatePrice()
{
_product.Price = 100; // Update price logic
}
ViewModel এবং Model এর মধ্যে ডেটা সিঙ্ক্রোনাইজেশন:
public void LoadProductData(int productId)
{
Product product = _productRepository.GetProductById(productId);
Name = product.Name;
Price = product.Price;
}
INotifyPropertyChanged ইন্টারফেস:
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Error Handling:
public string ErrorMessage { get; private set; }
public void ValidateProduct()
{
if (string.IsNullOrEmpty(Name))
{
ErrorMessage = "Product name cannot be empty.";
}
}
এভাবে ViewModel তৈরি এবং কনফিগারেশন করলে অ্যাপ্লিকেশনটির কার্যকারিতা এবং রক্ষণাবেক্ষণ অনেক সহজ হয়, এবং MVVM প্যাটার্নের সকল সুবিধা পূর্ণভাবে কাজে আসে।
MVVM প্যাটার্নে ViewModel হল একটি গুরুত্বপূর্ণ উপাদান যা View এবং Model এর মধ্যে সেতুবন্ধন হিসেবে কাজ করে। ViewModel এর মূল কাজ হল Model থেকে ডেটা গ্রহণ করা এবং সেই ডেটাকে View-এ উপস্থাপনযোগ্য ফরম্যাটে রূপান্তর করা। এটি View এর সাথে সরাসরি যোগাযোগ না করলেও ডেটা বাইন্ডিংয়ের মাধ্যমে View-এ ডেটা পাঠায় এবং View থেকে ইনপুট গ্রহণ করে তা Model-এ পাঠায়।
ViewModel ক্লাস সাধারণত INotifyPropertyChanged ইন্টারফেসের মাধ্যমে View-এ ডেটা পরিবর্তন সিগন্যাল পাঠানোর ব্যবস্থা করে। এটি View-কে জানিয়ে দেয় যে কোনো প্রপার্টির মান পরিবর্তিত হয়েছে এবং View তখন সেই পরিবর্তন রিফ্লেক্ট করতে পারে।
INotifyPropertyChanged ইন্টারফেসের মাধ্যমে ViewModel জানাতে পারে যে কোনো প্রপার্টি পরিবর্তিত হলে তা View-এ প্রতিফলিত হবে।
public class ProductViewModel : INotifyPropertyChanged
{
private string _productName;
private decimal _price;
public string ProductName
{
get { return _productName; }
set
{
if (_productName != value)
{
_productName = value;
OnPropertyChanged(nameof(ProductName));
}
}
}
public decimal Price
{
get { return _price; }
set
{
if (_price != value)
{
_price = value;
OnPropertyChanged(nameof(Price));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
এখানে, ProductName
এবং Price
প্রপার্টির জন্য যখনই মান পরিবর্তন হবে, OnPropertyChanged
মেথডটি কল হবে এবং এটি View কে জানিয়ে দেবে যে ওই প্রপার্টির মান পরিবর্তিত হয়েছে।
ViewModel-এ কমান্ড ব্যবহার করা হয় ইউজার ইন্টারঅ্যাকশন (যেমন বাটন ক্লিক) হ্যান্ডল করার জন্য। RelayCommand একটি সাধারণ কমান্ড ইমপ্লিমেন্টেশন যা ইউজারের ইন্টারঅ্যাকশন সিঙ্গনাল গ্রহণ করে এবং একটি মেথড কল করে।
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
public RelayCommand(Action execute, Func<bool> canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute();
}
public void Execute(object parameter)
{
_execute();
}
}
এই কমান্ডটি ViewModel-এ ইমপ্লিমেন্ট করা যেতে পারে:
public class ProductViewModel
{
public ICommand AddProductCommand { get; }
public ProductViewModel()
{
AddProductCommand = new RelayCommand(AddProduct, CanAddProduct);
}
private void AddProduct()
{
// প্রোডাক্ট যোগ করার লজিক
}
private bool CanAddProduct()
{
return !string.IsNullOrEmpty(ProductName) && Price > 0;
}
}
এখানে, AddProductCommand
কমান্ডটি একটি মেথড কল করবে যখন ইউজার একটি বাটন ক্লিক করবে। CanAddProduct
মেথডটি চেক করবে যে প্রোডাক্ট নাম এবং মূল্য সঠিকভাবে প্রবেশ করা হয়েছে কি না।
ViewModel হল MVVM প্যাটার্নের একটি গুরুত্বপূর্ণ অংশ, যা View এবং Model এর মধ্যে সম্পর্ক স্থাপন করে। এটি ডেটা বাইন্ডিং, কমান্ড প্যাটার্ন, এবং UI লজিক পরিচালনা করে, যার মাধ্যমে অ্যাপ্লিকেশনটির কার্যকারিতা এবং মেইনটেনেন্স অনেক সহজ হয়।
INotifyPropertyChanged ইন্টারফেস MVVM প্যাটার্নে ব্যবহৃত হয় ViewModel এবং View এর মধ্যে ডেটা বাইন্ডিংয়ের মাধ্যমে ডেটার পরিবর্তন সঠিকভাবে উপস্থাপন করতে। যখন ViewModel-এর কোনো প্রপার্টির মান পরিবর্তন হয়, তখন INotifyPropertyChanged ইন্টারফেস View-এ সেই পরিবর্তনটি স্বয়ংক্রিয়ভাবে প্রতিফলিত করতে সাহায্য করে। এটি View এবং ViewModel এর মধ্যে সিঙ্ক্রোনাইজেশন বজায় রাখে, যাতে ব্যবহারকারীর ইন্টারঅ্যাকশন এবং ডেটার আপডেট একটি স্থিতিশীলভাবে সম্পাদিত হয়।
INotifyPropertyChanged ইন্টারফেস একটি ইভেন্ট প্রদান করে যার মাধ্যমে আপনি জানাতে পারেন যে একটি প্রপার্টি পরিবর্তিত হয়েছে। যখন আপনি একটি প্রপার্টি আপডেট করেন, ইভেন্টটি ট্রিগার হবে এবং সেই পরিবর্তন View-এ রিফ্লেক্ট হবে।
এটি মূলত ViewModel-এ ব্যবহৃত হয় যাতে View ডেটা পরিবর্তনের প্রতি প্রতিক্রিয়া জানাতে পারে। যখন কোনো প্রপার্টি পরিবর্তন হয়, তখন ইভেন্টটি View-এ সংশ্লিষ্ট UI উপাদানকে আপডেট করার জন্য ট্রিগার হয়।
INotifyPropertyChanged ইন্টারফেস ব্যবহার করার জন্য আপনাকে দুটি প্রধান উপাদান প্রয়োজন:
নিচে একটি সাধারণ উদাহরণ দেয়া হলো যা দেখাবে কীভাবে INotifyPropertyChanged ব্যবহার করতে হয়।
using System.ComponentModel;
public class ProductViewModel : INotifyPropertyChanged
{
private string _name;
private decimal _price;
// INotifyPropertyChanged ইভেন্ট
public event PropertyChangedEventHandler PropertyChanged;
// প্রপার্টি পরিবর্তনের সময় ইভেন্ট ট্রিগার করতে OnPropertyChanged মেথড ব্যবহার করা হয়
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
// Name প্রপার্টি
public string Name
{
get { return _name; }
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name)); // PropertyChanged ইভেন্ট ট্রিগার করা
}
}
}
// Price প্রপার্টি
public decimal Price
{
get { return _price; }
set
{
if (_price != value)
{
_price = value;
OnPropertyChanged(nameof(Price)); // PropertyChanged ইভেন্ট ট্রিগার করা
}
}
}
}
এখন, ProductViewModel ক্লাসে যে প্রপার্টি পরিবর্তন হবে, সেই প্রপার্টিগুলি View-এ বাইন্ড করা যেতে পারে। যেহেতু INotifyPropertyChanged ইন্টারফেসটি ইমপ্লিমেন্ট করা হয়েছে, তাই View-এ বাইন্ড করা UI উপাদানগুলি স্বয়ংক্রিয়ভাবে আপডেট হবে যখন প্রপার্টির মান পরিবর্তন হবে।
<Window x:Class="MVVMExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MVVM Example" Height="200" Width="400">
<Grid>
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Margin="10" VerticalAlignment="Top"/>
<TextBox Text="{Binding Price, UpdateSourceTrigger=PropertyChanged}" Margin="10,40,10,10" VerticalAlignment="Top"/>
</Grid>
</Window>
অবশেষে, ViewModel কে View-এর DataContext হিসাবে অ্যাসাইন করা হবে, যাতে View সঠিকভাবে ViewModel থেকে ডেটা বাইন্ড করতে পারে।
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// ViewModel কে DataContext হিসেবে সেট করা
this.DataContext = new ProductViewModel
{
Name = "Product 1",
Price = 100.0m
};
}
}
OnPropertyChanged মেথড একটি গুরুত্বপূর্ণ ফাংশন যা PropertyChanged ইভেন্টটিকে ট্রিগার করে। এই মেথডটি প্রতিটি প্রপার্টি পরিবর্তনের সময় কল করা হয়, যাতে View সংশ্লিষ্ট UI উপাদানকে আপডেট করতে পারে। এটি শুধুমাত্র সেই প্রপার্টির নাম পাস করে, যেটি পরিবর্তিত হয়েছে।
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
এতে করে View-এ বাইন্ড করা UI উপাদানগুলি PropertyChanged ইভেন্টটি ট্রিগার হওয়ার পর স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়।
INotifyPropertyChanged ইন্টারফেসের মাধ্যমে ViewModel এবং View এর মধ্যে সঠিক ডেটা সিঙ্ক্রোনাইজেশন সম্ভব হয়। এটি ViewModel-এর প্রপার্টি পরিবর্তনের সাথে সাথে View-এ সেই পরিবর্তনটি প্রতিফলিত করতে সহায়তা করে। INotifyPropertyChanged ব্যবহারে কোড কমে যায় এবং UI-তে পরিবর্তন আসার সাথে সাথে স্বয়ংক্রিয়ভাবে সেগুলি আপডেট হয়, যা একটি সুষ্ঠু MVVM আর্কিটেকচারের জন্য অপরিহার্য।
Command Pattern একটি ডিজাইন প্যাটার্ন যা একটি কাজ বা অ্যাকশনকে একটি অবজেক্ট হিসেবে রূপান্তরিত করে, যা পরে বিভিন্ন অংশে কার্যকরী হতে পারে। MVVM প্যাটার্নে, Command প্যাটার্ন View এবং ViewModel এর মধ্যে পরিষ্কারভাবে বিভাজন করতে সাহায্য করে, যেখানে View ইউজার ইন্টারঅ্যাকশন (যেমন বাটনে ক্লিক) থেকে ViewModel এর ফাংশনালিটি কল করতে পারে। RelayCommand একটি কমন ক্লাস যা ICommand ইন্টারফেস ইমপ্লিমেন্ট করে এবং ViewModel এর মধ্যে কমান্ড ম্যানেজমেন্ট সহজ করে।
এখানে Command Pattern এবং RelayCommand এর ব্যবহার এবং ইমপ্লিমেন্টেশন নিয়ে বিস্তারিত আলোচনা করা হয়েছে।
Command Pattern মূলত একটি কাজ বা অ্যাকশনকে একটি Command অবজেক্টের মধ্যে encapsulate (গোছানো) করে এবং এই কমান্ডটি পরে প্রয়োগ করা হয়। View (যেমন বাটন ক্লিক) এর ইভেন্টগুলি ViewModel এর মেথডে পাঠানোর জন্য Command প্যাটার্ন ব্যবহার করা হয়। এর মাধ্যমে View সরাসরি ViewModel এর মেথডে কল না করে, Command অবজেক্টের মাধ্যমে এই কলটি ট্রিগার করতে পারে।
Execute()
এবং CanExecute()
.RelayCommand একটি কমন ক্লাস যা ICommand ইন্টারফেস ইমপ্লিমেন্ট করে এবং ViewModel থেকে কমান্ড ম্যানেজমেন্টের কাজ সহজ করে দেয়। এটি সাধারণত ViewModel এর মধ্যে UI Command লজিক কোড করার জন্য ব্যবহৃত হয়। RelayCommand ইউজারের ইন্টারঅ্যাকশন (যেমন বাটন ক্লিক) থেকে মেথড কল করার জন্য একযোগভাবে কাজ করে, এবং CanExecute() মেথডের মাধ্যমে নির্ধারণ করা হয়, যে কোন পরিস্থিতিতে কমান্ডটি কার্যকর হবে।
RelayCommand ইমপ্লিমেন্টেশন সাধারণত ICommand ইন্টারফেসের মাধ্যমে করা হয়। নিচে একটি উদাহরণ দেয়া হল যেখানে RelayCommand তৈরি করা হয়েছে এবং সেটি ViewModel এর মধ্যে ব্যবহার করা হয়েছে।
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
// Constructor to initialize Execute and CanExecute methods
public RelayCommand(Action execute, Func<bool> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
// ICommand implementation
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute();
}
public void Execute(object parameter)
{
_execute();
}
}
এখানে, RelayCommand
দুটি প্রধান মেথড সংজ্ঞায়িত করে:
true
রিটার্ন করে, তবে কমান্ডটি চালানো যায়; যদি false
রিটার্ন করে, তবে কমান্ডটি নিষ্ক্রিয় হয়ে যায়।এখন, আমরা RelayCommand ব্যবহার করে ViewModel তৈরি করব। ধরুন, আমাদের একটি Login বাটন আছে, এবং আমরা সেটি ক্লিক করলে একটি মেথড কল করতে চাই। এই কাজের জন্য আমরা RelayCommand ব্যবহার করব।
public class LoginViewModel : INotifyPropertyChanged
{
private string _username;
private string _password;
public string Username
{
get { return _username; }
set { _username = value; OnPropertyChanged(); }
}
public string Password
{
get { return _password; }
set { _password = value; OnPropertyChanged(); }
}
// RelayCommand for Login button
public ICommand LoginCommand { get; private set; }
public LoginViewModel()
{
// Initialize the RelayCommand with the Execute and CanExecute logic
LoginCommand = new RelayCommand(ExecuteLogin, CanExecuteLogin);
}
// Execute method for Login
private void ExecuteLogin()
{
// Logic for logging in the user
if (!string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password))
{
// Authentication logic
Console.WriteLine("Logging in...");
}
else
{
Console.WriteLine("Please provide username and password.");
}
}
// CanExecute method to check if the Login button should be enabled
private bool CanExecuteLogin()
{
return !string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password);
}
// INotifyPropertyChanged implementation for updating UI
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
RelayCommand
যা ExecuteLogin এবং CanExecuteLogin মেথডগুলির মাধ্যমে Login ফাংশনালিটি পরিচালনা করে।View (XAML) এ RelayCommand ব্যবহার করার জন্য, আমরা Command প্রপার্টি ব্যবহার করে Button এর সাথে ViewModel এর কমান্ড বাইন্ড করব।
<Button Content="Login" Command="{Binding LoginCommand}" />
এখানে, Button এর Command
প্রপার্টি LoginCommand এর সাথে বাইন্ড করা হয়েছে। যখন Login বাটনে ক্লিক করা হবে, তখন LoginCommand.Execute() কল হবে, যা ViewModel এ ExecuteLogin() মেথড রান করবে।
Command Pattern এবং RelayCommand MVVM প্যাটার্নে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। RelayCommand সাধারণত ViewModel এ কমান্ড লজিক লেখার জন্য ব্যবহৃত হয় এবং ICommand ইন্টারফেস ইমপ্লিমেন্ট করে View এবং ViewModel এর মধ্যে পরিষ্কার বিভাজন তৈরি করে। এটি ইউজারের ইনপুটকে একটি অবজেক্টে রূপান্তর করে, যা পরে কার্যকরী হয়, ফলে অ্যাপ্লিকেশনটি আরো টেস্টেবল, রিইউজেবল এবং মেইনটেনেবল হয়।
MVVM প্যাটার্নে ViewModel একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এটি Model এবং View এর মধ্যে তথ্য প্রবাহ এবং কমিউনিকেশন পরিচালনা করে। ViewModel ডেটার প্রক্রিয়াকরণ এবং পরিবর্তন পরিচালনা করে, এবং সেই ডেটা View এ উপস্থাপন করার জন্য প্রস্তুত করে। এর পাশাপাশি, এটি Model থেকে ডেটা গ্রহণ করে এবং View এর সঙ্গে ডেটা বাইন্ডিংয়ের মাধ্যমে UI উপাদানগুলির সাথে ডেটার সিঙ্ক্রোনাইজেশন বজায় রাখে।
এখানে ViewModel থেকে Model এবং View এর সাথে ডাটা কমিউনিকেশন সম্পর্কে বিস্তারিত আলোচনা করা হয়েছে।
ViewModel এর প্রধান কাজ হল Model থেকে ডেটা সংগ্রহ এবং সেই ডেটাকে View এর জন্য প্রক্রিয়াকরণ করা। যখন ViewModel Model থেকে ডেটা গ্রহণ করে, তখন এটি সাধারণত ডেটা সেবা (service layer) বা ডেটাবেস থেকে ডেটা আনতে Repository বা Data Service ব্যবহার করে।
public class ProductViewModel
{
private readonly ProductRepository _repository;
public ProductViewModel(ProductRepository repository)
{
_repository = repository;
}
public string ProductName { get; set; }
public decimal ProductPrice { get; set; }
public void SaveProduct()
{
var product = new Product
{
Name = ProductName,
Price = ProductPrice
};
_repository.AddProduct(product); // Model এ ডেটা সেভ করা
}
}
এখানে, ProductViewModel ডেটা সেভ করতে ProductRepository কে কল করছে, যা Model (Product) এর ডেটা সেভ করবে।
ViewModel Model থেকে ডেটা ফেচ করে এবং সেটি View তে প্রদর্শনের জন্য প্রস্তুত করে। Model এর মধ্যে থাকা ডেটা (যেমন ডেটাবেস বা API থেকে প্রাপ্ত ডেটা) ViewModel দ্বারা নিয়ন্ত্রণ এবং প্রক্রিয়াকৃত হয়।
public class ProductViewModel
{
private readonly ProductRepository _repository;
public ProductViewModel(ProductRepository repository)
{
_repository = repository;
}
public ObservableCollection<Product> Products { get; set; }
public void LoadProducts()
{
var productList = _repository.GetAllProducts(); // Model থেকে ডেটা সংগ্রহ
Products = new ObservableCollection<Product>(productList); // ViewModel-এ ডেটা সন্নিবেশ
}
}
এখানে, ViewModel ProductRepository এর মাধ্যমে Model থেকে সমস্ত প্রোডাক্টের তথ্য সংগ্রহ করছে এবং Products প্রপার্টির মাধ্যমে সেই ডেটাকে View-এ প্রদর্শন করার জন্য প্রস্তুত করছে।
ViewModel থেকে View এর সাথে ডাটা কমিউনিকেশন মূলত Data Binding এর মাধ্যমে ঘটে। ViewModel এর প্রপার্টিগুলি UI উপাদানগুলির সাথে বাইন্ড করা হয়, যাতে View-এ কোনো পরিবর্তন হলে তা স্বয়ংক্রিয়ভাবে ViewModel-এ প্রভাব ফেলে এবং vice versa। ViewModel-এ থাকা ডেটার পরিবর্তন হলে তা View-এ রিফ্লেক্ট হয় এবং UI-তে পরিবর্তন দেখা যায়।
ViewModel এর প্রপার্টি UI উপাদানগুলির সাথে বাইন্ড করে View-এ ডেটা প্রদর্শন করা হয়। ডেটা বাইন্ডিংয়ের মাধ্যমে ViewModel এর প্রপার্টি পরিবর্তিত হলে UI স্বয়ংক্রিয়ভাবে আপডেট হয়।
<!-- XAML File (View) -->
<TextBox Text="{Binding ProductName}" />
<TextBox Text="{Binding ProductPrice}" />
<Button Content="Save" Command="{Binding SaveCommand}" />
এখানে, TextBox এর Text প্রপার্টি ProductName এবং ProductPrice এর সাথে বাইন্ড করা হচ্ছে। ProductName এবং ProductPrice ViewModel-এ থাকতে পারে, এবং যখন এগুলির মান পরিবর্তিত হবে, তখন তা UI-তে (View) স্বয়ংক্রিয়ভাবে আপডেট হবে।
ViewModel এর কমান্ড প্রপার্টি View এর অ্যাকশন (যেমন, বাটন ক্লিক) সাথে বাইন্ড করা হয়। Command Binding ব্যবহার করে View থেকে ViewModel এর কমান্ড মেথড কল করা হয়।
public class ProductViewModel
{
public ICommand SaveCommand { get; private set; }
public ProductViewModel()
{
SaveCommand = new RelayCommand(SaveProduct);
}
private void SaveProduct()
{
// Save the product logic
}
}
এখানে, SaveCommand View থেকে Button এর মাধ্যমে কল হবে। যখন ব্যবহারকারী বাটনে ক্লিক করবেন, তখন ViewModel-এ থাকা SaveProduct মেথডটি ট্রিগার হবে।
XAML এর মধ্যে কমান্ড বাইন্ডিং:
<Button Content="Save" Command="{Binding SaveCommand}" />
এখানে, Button এর Command প্রপার্টি SaveCommand এর সাথে বাইন্ড করা হয়েছে, এবং যখন ব্যবহারকারী বাটনটি ক্লিক করবেন, তখন SaveProduct মেথডটি কল হবে।
common.read_more